#include <bits/stdc++.h>
using namespace std;
const double eps=1e-5;
bool vis[4];
int num[4];
int now[4];
int op[3];
int t;
double ope(double a,double b,int x){
    switch(x){
        case 1:{
            return a+b;
        }
        case 2:{
            return a-b;
        }
        case 3:{
            return a*b;
        }
        case 4:{
            if(fabs(b-0)>eps){
                return a/b;
            }
            else{
                return -0x3f3f3f3f;
            }
        }
        case 5:{
            return b-a;
        }
        case 6:{
            if(fabs(a-0)>eps){
                return b/a;
            }
            else{
                return -0x3f3f3f3f;
            }
        }
    }
}
//式子只有两种形式
double check1(){
    return ope(ope(now[0],now[1],op[0]),ope(now[2],now[3],op[1]),op[2]);
}
double check2(){
    return ope(ope(ope(now[0],now[1],op[0]),now[2],op[1]),now[3],op[2]);
}
bool calc(int dep){
    //三个运算符枚举结束
    if(dep==3){
        if(fabs(check1()-24)<eps){
            return true;
        }
        if(fabs(check2()-24)<eps){
            return true;
        }
        return false;
    }
    //枚举运算符
    for(int i=1;i<=6;i++){
        op[dep]=i;
        if(calc(dep+1)){
            return true;
        }
    }
    return false;
}
bool dfs(int dep){
    //四个数字枚举结束
    if(dep==4){
        return calc(0);
    }
    //枚举数字
    for(int i=0;i<4;i++){
        if(!vis[i]){
            vis[i]=true;
            now[dep]=num[i];
            if(dfs(dep+1)){
                return true;
            }
            vis[i]=false;
        }
    }
    return false;
}
int main(void){
    scanf("%d",&t);
    while(t--){
        memset(vis,false,sizeof(vis));
        scanf("%d%d%d%d",&num[0],&num[1],&num[2],&num[3]);
        //从第一个数开始搜
        if(dfs(0)){
            printf("Yes\n");
        }
        else{
            printf("No\n");
        }
    }
    return 0;
}